In known distributed software applications, software components are distributed among a plurality of executables (i.e., software capsules or software entities). Each of the executables contains one or more software components that perform some portion of the functionality of the distributed software application. For distributed software applications to work, the software components need to interact with each other. For example, the communication between the software components occurs across communication channels between the software components.
To establish communication channels between the software components, software developers would need to write special software in each of the software components to handle setting up communication channels. Upon determination that a communication channel is needed to another software component, a software component negotiates with the other software component in attempt to set up the communication channel to the other software component.
As one shortcoming, the initiating software component that attempts to set up the communication channel may not be aware of the current state of other software components of the software application. If an initiating software component attempts to set up a communication channel with another software component that is not in a valid state for communication channel setup, then setting up the communication channel will fail. As another shortcoming, if software components at the other end of the communication channel fail, the initiating software component may not be aware of the failure at the other end. As yet another shortcoming, the software developers must write extra software for each software component to manage (i.e., setup and maintain) communication channels. The extra software may need to be customized for a specific software application or system. Creating software for each software component to manage communication channels increases the amount of effort required by the software developers to create the software components.
Thus, a need exists to alleviate software components of the responsibility of setting up and maintaining communication channels.